home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / utils / raysh386 / src / hf.c < prev    next >
Text File  |  1992-05-04  |  18KB  |  605 lines

  1. eat
  2.     Color := RandColor;
  3.     SetColor(Color);
  4.     SetFillStyle(Random(CloseDotFill)+1, Color);
  5.     Bar3D(Random(MaxWidth), Random(MaxHeight),
  6.           Random(MaxWidth), Random(MaxHeight), 0, TopOff);
  7.   until KeyPressed;
  8.   WaitToGo;
  9. end; { RandBarPlay }
  10.  
  11. procedure ArcPlay;
  12. { Draw random arcs on the screen }
  13. var
  14.   MaxRadius : word;
  15.   EndAngle : word;
  16.   ArcInfo : ArcCoordsType;
  17. begin
  18.   MainWindow('Arc / GetArcCoords demonstration');
  19.   StatusLine('Esc aborts or press a key');
  20.   MaxRadius := MaxY div 10;
  21.   repeat
  22.     SetColor(RandColor);
  23.     EndAngle := Random(360);
  24.     SetLineStyle(SolidLn, 0, NormWidth);
  25.     Arc(Random(MaxX), Random(MaxY), Random(EndAngle), EndAngle, Random(MaxRadius));
  26.     GetArcCoords(ArcInfo);
  27.     with ArcInfo do
  28.     begin
  29.       Line(X, Y, XStart, YStart);
  30.       Line(X, Y, Xend, Yend);
  31.     end;
  32.   until KeyPressed;
  33.   WaitToGo;
  34. end; { ArcPlay }
  35.  
  36. procedure PutPixelPlay;
  37. { Demonstrate the PutPixel and GetPixel commands }
  38. const
  39.   Seed   = 1962; { A seed for the random number generator }
  40.   NumPts = 2000; { The number of pixels plotted }
  41.   Esc    = #27;
  42. var
  43.   I : word;
  44.   X, Y, Color : word;
  45.   XMax, YMax  : integer;
  46.   ViewInfo    : ViewPortType;
  47. begin
  48.   MainWindow('PutPixel / GetPixel demonstration');
  49.   StatusLine('Esc aborts or press a key...');
  50.  
  51.   GetViewSettings(ViewInfo);
  52.   with ViewInfo do
  53.   begin
  54.     XMax := (x2-x1-1);
  55.     YMax := (y2-y1-1);
  56.   end;
  57.  
  58.   while not KeyPressed do
  59.   begin
  60.     { Plot random pixels }
  61.     RandSeed := Seed;
  62.     I := 0;
  63.     while (not KeyPressed) and (I < NumPts) do
  64.     begin
  65.       Inc(I);
  66.         PutPixel(Random(XMax)+1, Random(YMax)+1, RandColor);
  67.     end;
  68.  
  69.     { Erase pixels }
  70.     RandSeed := Seed;
  71.     I := 0;
  72.     while (not KeyPressed) and (I < NumPts) do
  73.     begin
  74.       Inc(I);
  75.       X := Random(XMax)+1;
  76.       Y := Random(YMax)+1;
  77.       Color := GetPixel(X, Y);
  78.         if Color = RandColor then
  79.           PutPixel(X, Y, 0);
  80.      end;
  81.   end;
  82.   WaitToGo;
  83. end; { PutPixelPlay }
  84.  
  85. procedure PutImagePlay;
  86. { Demonstrate the GetImage and PutImage commands }
  87.  
  88. const
  89.   r  = 20;
  90.   StartX = 100;
  91.   StartY = 50;
  92.  
  93. var
  94.   CurPort : ViewPortType;
  95.  
  96. procedure MoveSaucer(var X, Y : integer; Width, Height : integer);
  97. var
  98.   Step : integer;
  99. begin
  100.   Step := Random(2*r);
  101.   if Odd(Step) then
  102.     Step := -Step;
  103.   X := X + Step;
  104.   Step := Random(r);
  105.   if Odd(Step) then
  106.     Step := -Step;
  107.   Y := Y + Step;
  108.  
  109.   { Make saucer bounce off viewport walls }
  110.   with CurPort do
  111.   begin
  112.     if (x1 + X + Width - 1 > x2) then
  113.       X := x2-x1 - Width + 1
  114.     else
  115.       if (X < 0) then
  116.         X := 0;
  117.     if (y1 + Y + Height - 1 > y2) then
  118.       Y := y2-y1 - Height + 1
  119.     else
  120.       if (Y < 0) then
  121.         Y := 0;
  122.   end;
  123. end; { MoveSaucer }
  124.  
  125. var
  126.   Pausetime : word;
  127.   Saucer    : pointer;
  128.   X, Y      : integer;
  129.   ulx, uly  : word;
  130.   lrx, lry  : word;
  131.   Size      : word;
  132.   I         : word;
  133. begin
  134.   ClearDevice;
  135.   FullPort;
  136.  
  137.   { PaintScreen }
  138.   ClearDevice;
  139.   MainWindow('GetImage / PutImage Demonstration');
  140.   StatusLine('Esc aborts or press a key...');
  141.   GetViewSettings(CurPort);
  142.  
  143.   { DrawSaucer }
  144.   Ellipse(StartX, StartY, 0, 360, r, (r div 3)+2);
  145.   Ellipse(StartX, StartY-4, 190, 357, r, r div 3);
  146.   Line(StartX+7, StartY-6, StartX+10, StartY-12);
  147.   Circle(StartX+10, StartY-12, 2);
  148.   Line(StartX-7, StartY-6, StartX-10, StartY-12);
  149.   Circle(StartX-10, StartY-12, 2);
  150.   SetFillStyle(SolidFill, MaxColor);
  151.   FloodFill(StartX+1, StartY+4, GetColor);
  152.  
  153.   { ReadSaucerImage }
  154.   ulx := StartX-(r+1);
  155.   uly := StartY-14;
  156.   lrx := StartX+(r+1);
  157.   lry := StartY+(r div 3)+3;
  158.  
  159.   Size := ImageSize(ulx, uly, lrx, lry);
  160.   GetMem(Saucer, Size);
  161.   GetImage(ulx, uly, lrx, lry, Saucer^);
  162. {  PutImage(ulx, uly, Saucer^, XORput);               { erase image }
  163.  
  164.   { Plot some "stars" }
  165.   for I := 1 to 1000 do
  166.      PutPixel(Random(MaxX), Random(MaxY), RandColor);
  167.   X := MaxX div 2;
  168.   Y := MaxY div 2;
  169.   PauseTime := 70;
  170.  
  171.   { Move the saucer around }
  172.   repeat
  173. {     PutImage(X, Y, Saucer^, XORput);                 { draw image }
  174.      Delay(PauseTime);
  175. {     PutImage(X, Y, Saucer^, XORput);                 { erase image }
  176.      MoveSaucer(X, Y, lrx - ulx + 1, lry - uly + 1);  { width/height }
  177.   until KeyPressed;
  178.   FreeMem(Saucer, size);
  179.   WaitToGo;
  180. end; { PutImagePlay }
  181.  
  182. procedure PolyPlay;
  183. { Draw random polygons with random fill styles on the screen }
  184. const
  185.   MaxPts = 5;
  186. type
  187.   PolygonType = array[1..MaxPts] of PointType;
  188. var
  189.   Poly : PolygonType;
  190.   I, Color : word;
  191. begin
  192.   MainWindow('FillPoly demonstration');
  193.   StatusLine('Esc aborts or press a key...');
  194.   repeat
  195.     Color := RandColor;
  196.     SetFillStyle(Random(11)+1, Color);
  197.     SetColor(Color);
  198.     for I := 1 to MaxPts do
  199.       with Poly[I] do
  200.       begin
  201.         X := Random(MaxX);
  202.         Y := Random(MaxY);
  203.       end;
  204.     FillPoly(MaxPts, Poly);
  205.   until KeyPressed;
  206.   WaitToGo;
  207. end; { PolyPlay }
  208.  
  209. procedure FillStylePlay;
  210. { Display all of the predefined fill styles available }
  211. var
  212.   Style    : word;
  213.   Width    : word;
  214.   Height   : word;
  215.   X, Y     : word;
  216.   I, J     : word;
  217.   ViewInfo : ViewPortType;
  218.  
  219. procedure DrawBox(X, Y : word);
  220. begin
  221.   SetFillStyle(Style, MaxColor);
  222.   with ViewInfo do
  223.     Bar(X, Y, X+Width, Y+Height);
  224.   Rectangle(X, Y, X+Width, Y+Height);
  225.   OutTextXY(X+(Width div 2), Y+Height+4, Int2Str(Style));
  226.   Inc(Style);
  227. end; { DrawBox }
  228.  
  229. begin
  230.   MainWindow('Pre-defined fill styles');
  231.   GetViewSettings(ViewInfo);
  232.   with ViewInfo do
  233.   begin
  234.     Width := 2 * ((x2+1) div 13);
  235.     Height := 2 * ((y2-10) div 10);
  236.   end;
  237.   X := Width div 2;
  238.   Y := Height div 2;
  239.   Style := 0;
  240.   for J := 1 to 3 do
  241.   begin
  242.     for I := 1 to 4 do
  243.     begin
  244.       DrawBox(X, Y);
  245.       Inc(X, (Width div 2) * 3);
  246.     end;
  247.     X := Width div 2;
  248.     Inc(Y, (Height div 2) * 3);
  249.   end;
  250.   SetTextJustify(LeftText, TopText);
  251.   WaitToGo;
  252. end; { FillStylePlay }
  253.  
  254. procedure FillPatternPlay;
  255. { Display some user defined fill patterns }
  256. const
  257.   Patterns : array[0..11] of FillPatternType = (
  258.   ($AA, $55, $AA, $55, $AA, $55, $AA, $55 üÖü üÖü  !BBäx!!!BBäx!BBäx"""DDêp""DDêp>"""BBääêp""!"BDäêêp>IÉÆ|      ° @≥î>00>><Dêx  !BBäx""DDêp&<"DDêê&22TTêêê$> $< @äêp>          ⁿBBBB<  @@Ç****DDDDDDDU¬U¬U¬U¬U¬U¬U¬▌w▌w▌w▌w▌w▌w▌w°°°≥■°°≥≥■≥≥■■°°°    ≤  ≤  ≤≤         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       ;DDD;    $"Bdÿ>@@@>||>Ac]AAA1N"A""2,  `1NA"*III*<Bü üB<<BüüüB<A" \"QIE" < <BBBB  @@    ~ ?  @ÇB$$B ""A$$"AII6 üBr»$**IIII**ccregion.  The region is defined as any pixel of
  259.             OldColor which has a path of pixels of OldColor or NewColor
  260.             with sides touching back to the seed point, (XSeed, YSeed).
  261.             Therefore, only pixels of OldColor are modified and no other
  262.             information is changed.
  263.  
  264.             SEE ALSO
  265.  
  266.             DRWFILLBOX, DRWFILLCIRCLE, DRWFILLELLIPSE, FILLAREA,
  267.             FILLCONVEXPOLY, FILLPAGE, FILLPOLY, FILLSCREEN, FILLVIEW,
  268.             SETVIEW
  269.  
  270.             EXAMPL(HNxHHO$B<BBBB<$<BBBB<<BBBB<$BBBBBF:0BBBBF:$BBBF:B<""AAA""AAAAA"<B@@B<" <2\A">>xDDxDNDD <` <>BB= > <BBBB< BBBBF:2L\bBBBB&AaQIECA8$>""">0@@A>@@@ b$(. b$(*
  271.     $    $    $DDDDDDD¬U¬U¬U¬U¬U¬U¬Uw▌w▌w▌w▌w▌w▌w▌°°°⌠ⁿ°°⌠⌠ⁿ⌠⌠ⁿⁿ°°°    ≈  ≈  ≈≈         °                     ≡≡≡≡≡≡≡≡≡≡≡≡≡≡       7HH7"B\DBBRL~BB@@@@@@?R~!!~?DDDD8BBBB|@@Ç>P>III>"AA""AAA"Uw<DDDD86II6"EIQ"\ @@ "AAAAA> >     hH02L2L$$<H(,$<>>>>>>>         VMODE=VIDEOMODEGET
  272.             IF WHICHVGA = 0 THEN STOP
  273.             DUMMY=RES640
  274.             SETVIEW 100, 100, 539, 379
  275.             FILLVIEW 10
  276.             WHILE INKEY$ = ""
  277.             WEND
  278.             VIDEOMODESET VMODE
  279.             END
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.                                                                          63
  297.  
  298.  
  299.  
  300.  
  301.  
  302.           FONTGETINFO
  303.  
  304.             PROTOTYPE
  305.  
  306.             SUB FONTGETINFO (Width%, Height%)
  307.  
  308.             INPUT
  309.  
  310.             no input parameters
  311.     WEND
  312.             MOUSEEXIT
  313.             VIDEOMODESET VMODE
  314.             END
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.                                                                          86
  356.  
  357.  
  358.  
  359.  
  360.  
  361.           MOUSECURSORDEFAULT
  362.  
  363.             PROTOTYPE
  364.  
  365.             SUB MOUSECURSORDEFAULT ()
  366.  
  367.             INPUT
  368.  
  369.             no input parameters
  370.  
  371.             OUTPUT
  372.  
  373.             no value returned
  374.  
  375.             USAGE
  376.  
  377.             MOUSECURSORDEFAULT defines the mouse cursor to be a small
  378.        ,K$╖┼╘╤░XQ)σ┤ö≡÷┴─┤àñT┘,╘¬àñX9╘⌠àñ\9╘UÜ╢≤`9╘4a╘d9╘UTa╘h9╘ta╘l9╘Uöa╘p9╘┤a╘t┘PT±x┴îÇ╖0▓ïα│ÅαU┤ôα╡ùα╢¢α╖úΓ╘pǺΓ╕¡αë ╚┴πì°sKÉφb<$⌡▌ë     φë φë I1φë  Eφë $YφÆë (mφë ,üφë 0$òφë á⌐φë ñ╜φë I¿╤φë ¼σφë ░∙φÆë 4²ë ┤!²ë ╕$5²ë ╝I²ë └]²ë ⌐8q²ë <àⁿΦiǬ∙PÖÇ ¥Ç
  379. ⁿ░╨â@%8@ΓΦá╝╤░≡cÑÅ*$░╕≡ż≡τ╥m¿⌡ε    ╨@#µ≈$âh$âαra╨à`¥è∩Ç%Ç +─▀ TîcOî∩â°1<@  [$¿Ç¼ MMl·0ƒ Y¼─!%6a▐è ¥ì ßá+?±  P<îaTTV ╪iÇ¡≥░ `_ñ»%Çá᪠P█º»ε`éa∙É%H«┴íA%Gár∙É
  380. iw∙Éiφ`╧≥≡╤Çmⁿ▒
  381. ]ÆAáσw7░⌡∩    $·╟Ç√É&^`  ┐ $ⁿ  $■ $╒ nk$J-ÉQ1£PéBù »0αQ/Ñ4╜£░ºP≈Ñ4Ç⌡$(ª▀$@C]Æé≈└╕_SÇçÑ4=iÉ⌠ä╣<_np@Ñ45ò▒Y3ü¼Qí░.i>╠@5+┴╙É╛╙$@ #┴@«╦
  382. $╤
  383. #@Ñú4,p&e÷ü¼_ÇQºÑ4òQ  ü@;¡_áQ@e╠≥@mp!┤a╘O░√`Pñź ÇT°8ÿ!¼Åñ$½╙"q¿ PñCÇ¿α√└╥░eT"ß<p°%Pæ(╧%pδ¥/OêW0Ǽbφ φ B@[â¼8â≥µ≤(    ¿⌡%(Ç∩áTÿp+ óÜ▓0!Σ±(1±░┤ÖÇD└D0Å╡`   $ «îO@╧1
  384. a╝╤j-0ñ│`@╖bΦaT1═⌠╝╤Σ²¼±,1öíî9lÿ28ÇÅ`Γî¿P²$,N0┴O0a╫δ≤0σú`°î╖#0δ≡└X▄1»Σî(▒¥Ç█Ñ"qá√1CÇú╟╨º Å
  385. FT Θ²î└1ÇY0    w ²à░$@AÅ`╦Φ¼╘`▄1A  }┐Ç*5 ΩSδδî`¼îaδæ¼î5 1¿⌡Ω╜⌠ ¼¥╬ü└Qî1S╛≤î9╨iÇ,∙PU(}Ç$üÇ àÇ`σìÇ`QαÜBO$%ÿÇ╧"$Ç«Ç]É.┬\`%WÉ$  W0 ÄâO0]αG┬ur╩░£▒Q¢ú╔Ç≡°s?`X0╘`@ µWâ@╣aá εdq`¥9?Ç&+o0µyÄΣAÅuV(7P╬±@IdQ╕@Å┤@;Ç▓?Çò│CÇ┤╟╨╡KÇÄ30ⁿφ° ó╬ì+]Ä╦≡     Mö╝σ ²y5<!└▀óâ╝É3~mp    $<╛≤9Æ-2ⁿ≡@T,╞Σa,)Pæ└¥#¼╪Q┤S(¼@Aîa≡╤@Ö²±⌠KëD─┴▒▀0╨Ñ$╩-0 ╨ê*╙▓edm`î=3Kß-10è=≥≤²└£mîjy ÿe²ⁿ╨i╕e▓ΣmαÖ╢C%Ç*ê*0 EátQZ`mÄLP%    °üⁿªüNQ∙  T¿<qtWΩc z░ÅÇñΩçǪçÇ«;└<┐á¼¥. á?<Σscî)áí := 0;
  386.       end;
  387.     end;
  388.   end;
  389.   WaitToGo;
  390. end; { UserLineStylePlay }
  391.  
  392.  
  393. procedure SayGoodbye;
  394. { Say goodbye and then exit the program }
  395. var
  396.   ViewInfo : ViewPortType;
  397. begin
  398.   MainWindow('');
  399.   GetViewSettings(ViewInfo);
  400.   SetTextStyle(TriplexFont, HorizDir, 4);
  401.   SetTextJustify(CenterText, CenterText);
  402.   with ViewInfo do
  403.     OutTextXY((x2-x1) div 2, (y2-y1) div 2, 'That''s all folks!');
  404.   StatusLine('Press any key to quit...');
  405.   repeat until KeyPressed;
  406. end; { SayGoodbye }
  407.  
  408.  
  409. PROCEDURE SelectMode;
  410. VAR
  411.     choice1,choice2     : CHAR;
  412.    xsize,ysize            : WORD;
  413. BEGIN
  414.     (* Let's select a mode *)
  415.     ClrScr;
  416.     WriteLn('VESADEMO:');
  417.     WriteLn('1. 256 colors');
  418.     WriteLn('2. 32768 colors');
  419.     WriteLn('3. 65536 colors');
  420.     WriteLn('4. 16777216 colors');
  421.     WriteLn('Q uit');
  422.     WriteLn;
  423.     Write('Your choice: ');
  424.     REPEAT
  425.         ReadLn(choice1);
  426.       IF choice1 <> '1' THEN BEGIN
  427.           WriteLn('Sorry !');
  428.          WriteLn('This demo wasn''t written for more as 256 colors !');
  429.          WriteLn('You would only get a limited impression of the Hi-& TrueColor modes...');
  430.          WriteLn('Switching to 256 colors.');
  431.          choice1 := '1';
  432.       END;
  433.     UNTIL choice1 IN ['1'..'4','q'];
  434.     IF choice1 = 'q' THEN Halt;
  435.  
  436.     WriteLn;
  437.     WriteLn;
  438.     WriteLn('a. 320x200');
  439.     WriteLn('b. 640x480');
  440.     WriteLn('c. 800x600');
  441.     WriteLn('d. 1024x768');
  442.     WriteLn('e. 1280x1024');
  443.     WriteLn('Q uit');
  444.     WriteLn;
  445.     Write('Your choice: ');
  446.     REPEAT
  447.         ReadLn(choice2);
  448.     UNTIL choice2 IN ['a'..'e','q'];
  449.     IF choice2 = 'q' THEN Halt;
  450.  
  451.     CASE choice2 OF
  452.         'a' : BEGIN
  453.             xsize := 320;
  454.             ysize := 200;
  455.         END;
  456.         'b' : BEGIN
  457.             xsize := 640;
  458.             ysize := 480;
  459.         END;
  460.         'c' : BEGIN
  461.             xsize := 800;
  462.             ysize := 600;
  463.         END;
  464.         'd' : BEGIN
  465.             xsize := 1024;
  466.             ysize := 768;
  467.         END;
  468.         'e' : BEGIN
  469.             xsize := 1280;
  470.             ysize := 1024;
  471.         END;
  472.     END;
  473.     CASE choice1 OF
  474.         '1' : mode := FindVesaMode(xsize,ysize,8);
  475.         '2' : mode := FindVesaMode(xsize,ysize,15);
  476.         '3' : mode := FindVesaMode(xsize,ysize,16);
  477.         '4' : mode := FindVesaMode(xsize,ysize,24);
  478.     END;
  479.     IF mode = 0 THEN BEGIN
  480.         WriteLn('No such mode could be found !');
  481.         WriteLn('Switching to to 320x200.');
  482.         ReadKey;
  483.         mode := V320x200x256;
  484.     END;
  485. END;
  486.  
  487. begin { program body }
  488.   SelectMode;
  489.   Initialize;
  490.   ReportStatus;
  491.  
  492. {  AspectRatioPlay; }
  493.   FillEllipsePlay;
  494.   SectorPlay;
  495.   WriteModePlay;
  496.  
  497.   ColorPlay;
  498.   { PalettePlay only intended to work on these drivers: }
  499.   if (GraphDriver = EGA) or
  500.       (GraphDriver = EGA64) or
  501.       (GraphDriver = VGA) then
  502.      PalettePlay;
  503.   PutPixelPlay;
  504. {  PutImagePlay; }
  505.   RandBarPlay;
  506.   BarPlay;
  507.   Bar3DPlay;
  508.   ArcPlay;
  509.   CirclePlay;
  510.   PiePlay;
  511.   LineToPlay;
  512.   LineRelPlay;
  513. {  LineStylePlay; }
  514. {  UserLineStylePlay; }
  515.   TextDump;
  516.   TextPlay;
  517.   CrtModePlay;
  518.   FillStylePlay;
  519.   FillPatternPlay;
  520.   PolyPlay;
  521.   SayGoodbye;
  522. {  CloseGraph; }
  523.   CloseVesa;
  524. end.
  525. ***************************************************
  526.     '* SHOW D2ROTATE (ABOUT THE ORIGIN)
  527.     '****************************************************************∞╥≤c≤*φè#^│v/╒:j═φ0t+l▓ô"¬"g└≡?%ªêΣ│H╫½╫╜├¿U'╒⌐⌡ ßV?╩¬ujOΦçEZ1∞▐! ▄B╛Σ8║æ]1GlNÜ┐q▌▓;ô$ΦzE<cª*bEô#ä╧ñÅ"∩─LrdaÖ ╠º╫a^¥£å╬1~)@ëÖMδ╫0═6DäFê¬Çv┼ß╨kæpτ╪É)}ª 1w3╤╧ü⌡¥╓h▓╣≈ïÅaÑ[TⁿHqªÉ╝DKÄ─Y-∞tT╤Θ╨º╟╪.*ÇI9lΦ≈{πτcσ$τπßoFr╪╨∩┼╞╟;O2■e²LÜ4^N|╪½ÅO?╔°FOz`╟╟╟'<>>π$πΘù6·Xgî╖│°oîδπGƒd╝▀░?■╪╔_9L ⌡ôⁿq'æO▀ƒn4╔▀╚▄┼3pτ.òO°·}÷╕ⁿ±'æO?ít│!√8ßÑ≤/┐╣p┼≥┘E╦Vox╕cΦé5╟╚º╙$?√$≥ΘZεsî≡åìΓpKù¢ïß X╥ 9╞≈\µk┤O¥_ 5Üö\≤éÄ┌╤A[╤ÿáï┼éNⁿÅu16    g,%hc╙╨cD╨Vï┘R¢öKñR;8εáΣ╢╪ós╤π╡á└èxgzPÄMú╫yαºÉ+σJ¢i+▓â3╥    ═Ñ╙î^ºG▓█πérφçs %#(╗⌠?┼%u8≡6+QÉ))ò)Afw≈╣╪)B&4░åLXV:δät@Å.;5Φf╢Ät┐ΣJ╫─U8úÇ╟éö£╕p╔┴⌠vg╨╬╥é÷╪╣┬ΓI.ç≡^v╤ZΦÇ& ╒┌6ñô6XßNè╡╬E₧Ñ
  528. kIº╠▄A+╣╥éb²tæ-Y¡½αÑa═uuîÇ╢αêvhuª╡SÅ┤vèùú¥F;p<d⌐/F─d█éT%▓KΦû=q■öI┐ ┐╠6S$▒÷╚ENΩ¥Fû9╔┌R'╝ ╧φ└?g┬j▓0═/b╖₧─mûé╢┌»ÿÄë/·<éò■░╤╟╢├Xσ:╥P3Θ"╬Læsφ░┌öSö!╗¿*mN£WΣÇ£┤~#╗ææ≥RΩóh:à▌.æ≈╕▌v£äàd▒à╒├=░╖π║$howeg*╬    6ù▄ƒô╕φ░Ö╢qΘD>(w@úKεHÆ╛öúΣU
  529. éÜR╔╤W▄èê 2M%ó.▓SNÖA1ùJE╢║l]▓¿>\%└Å4ßO▄£â⌐& ê/)8vSP▀▓ôⁿææ√ü√ÑÄa⌠â╚4S╓╟P- ?Σá╕▓Næ*q╡UΘ▓≈^ñ·I.rúR&$Y^╚%è≡B┌≈Ceat
  530.     Color := RandColor;
  531.     SetColor(Color);
  532.     SetFillStyle(Random(CloseDotFill)+1, Color);
  533.     Bar3D(Random(MaxWidth), Random(MaxHeight),
  534.           Random(MaxWidth), Random(MaxHeight), 0, TopOff);
  535.   until KeyPressed;
  536.   WaitToGo;
  537. end; { RandBarPlay }
  538.  
  539. procedure ArcPlay;
  540. { Draw random arcs on the screen }
  541. var
  542.   MaxRadius : word;
  543.   EndAngle : word;
  544.   ArcInfo : ArcCoordsType;
  545. begin
  546.   MainWindow('Arc / GetArcCoords demonstration');
  547.   StatusLine('Esc aborts or press a key');
  548.   MaxRadius := MaxY div 10;
  549.   repeat
  550.     SetColor(RandColor);
  551.     EndAngle := Random(360);
  552.     SetLineStyle(SolidLn, 0, NormWidth);
  553.     Arc(Random(MaxX), Random(MaxY), Random(EndAngle), EndAngle, Random(MaxRadius));
  554.     GetArcCoords(ArcInfo);
  555.     with ArcInfo do
  556.     begin
  557.       Line(X, Y, XStart, YStart);
  558.       Line(X, Y, Xend, Yend);
  559.     end;
  560.   until KeyPressed;
  561.   WaitToGo;
  562. end; { ArcPlay }
  563.  
  564. procedure PutPixelPlay;
  565. { Demonstrate the PutPixel and GetPixel commands }
  566. const
  567.   Seed   = 1962; { A seed for the random number generator }
  568.   NumPts = 2000; { The number of pixels plotted }
  569.   Esc    = #27;
  570. var
  571.   I : word;
  572.   X, Y, Color : word;
  573.   XMax, YMax  : integer;
  574.   ViewInfo    : ViewPortType;
  575. begin
  576.   MainWindow('PutPixel / GetPixel demonstration');
  577.   StatusLine('Esc aborts or press a key...');
  578.  
  579.   GetViewSettings(ViewInfo);
  580.   with ViewInfo do
  581.   begin
  582.     XMax := (x2-x1-1);
  583.     YMax := (y2-y1-1);
  584.   end;
  585.  
  586.   while not KeyPressed do
  587.   begin
  588.     { Plot random pixels }
  589.     RandSeed := Seed;
  590.     I := 0;
  591.     while (not KeyPressed) and (I < NumPts) do
  592.     begin
  593.       Inc(I);
  594.         PutPixel(Random(XMax)+1, Random(YMax)+1, RandColor);
  595.     end;
  596.  
  597.     { Erase pixels }
  598.     RandSeed := Seed;
  599.     I := 0;
  600.     while (not KeyPressed) and (I < NumPts) do
  601.     begin
  602.       Inc(I);
  603.       X := Random(XMax)+1;
  604.       Y := Random(YMax)+1;
  605.       Color := G